#!/usr/bin/env bash
# 这个文件是打算直接使用 shell 脚本进行容器定制的
# 与使用 cmd_file.txt 相比, 使用 cmd_file.sh 一次性执行所有的任务，
# 避免进行多次的 container.exec_run(cmd, tty=True) 调用
# 方便熟悉 shell 脚本编写的人员写出更高效的命令！

# 注意: 在automate.py执行时，默认的workdir是 /, 您可能需要更新为 /root

#######################################################
# 以下内容是一些可用的帮助, 可以在 shell 中使用 `help set` 来查看
# 另外, https://www.ruanyifeng.com/blog/2017/11/bash-set.html 写得不错！
# -a  标示已修改的变量，以供输出至环境变量。
# -b  使被中止的后台程序立刻回报执行状态。
# -C  转向所产生的文件无法覆盖已存在的文件。
# -d  Shell预设会用杂凑表记忆使用过的指令，以加速指令的执行。使用-d参数可取消。
# -e  若指令传回值不等于0，则立即退出shell。
# -f   取消使用通配符。
# -h  自动记录函数的所在位置。
# -H  Shell  可利用"!"加<指令编号>的方式来执行history中记录的指令。
# -k  指令所给的参数都会被视为此指令的环境变量。
# -l  记录for循环的变量名称。
# -m  使用监视模式。
# -n  只读取指令，而不实际执行。
# -p  启动优先顺序模式。
# -P  启动-P参数后，执行指令时，会以实际的文件或目录来取代符号连接。
# -t  执行完随后的指令，即退出shell。
# -u  当执行时使用到未定义过的变量，则显示错误信息。
# -v  显示shell所读取的输入值。
# -x  执行指令后，会先显示该指令及所下的参数。
# +<参数>  取消某个set曾启动的参数。
########################################################
set -euxo pipefail # 建议使用！
# -e: 一旦脚本中有任何一行执行失败，则立即退出
# -u: 一旦脚本中有任何一行使用了未定义的变量，则立即退出
# -x: 执行脚本时，将脚本中的每一行命令在执行前先输出到标准输出
# -o pipefail: 一旦使用管道组合的命令中有任何`一部分`执行失败，则整条命令执行失败.一般配合 set -e 使用，从而在管道的一部分执行失败时直接退出

FILE='/root/hello.c'
EXEC='/root/hello'

cat > $FILE << 'END'
#include <stdio.h>

int main(int argc, char* argv[]) {
    printf("Hello world!\nArgc: %d,\n", argc);
    for (int i = 0; i < argc; ++i) {
        printf("Argv[%d]: %s\n", i, argv[i]);
    }
    return 0;
}
END

# 更改Ubuntu 20.04(focal)的软件源
mv '/etc/apt/sources.list' '/etc/apt/sources.list.bak'
cat > '/etc/apt/sources.list' << 'END'
# 默认注释了源码镜像以提高 apt update 速度，如有需要可自行取消注释
deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal main restricted universe multiverse
# deb-src http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal main restricted universe multiverse
deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-updates main restricted universe multiverse
# deb-src http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-updates main restricted universe multiverse
deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-backports main restricted universe multiverse
# deb-src http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-backports main restricted universe multiverse

# deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-security main restricted universe multiverse
# # deb-src http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-security main restricted universe multiverse

deb http://security.ubuntu.com/ubuntu/ focal-security main restricted universe multiverse
# deb-src http://security.ubuntu.com/ubuntu/ focal-security main restricted universe multiverse

# 预发布软件源，不建议启用
# deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-proposed main restricted universe multiverse
# # deb-src http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-proposed main restricted universe multiverse
END
# 结束更改Ubuntu 20.04(focal)的软件源


# 安装软件操作会引入大量的依赖，所以不建议安装软件
apt-get update # 更新软件源
apt-get install build-essential -y # 安装编译工具
gcc $FILE -o $EXEC # 编译 hello.c
# 执行 hello 并且传入参数
$EXEC "Hello" "world!" "Good" "job"

echo -e "\tHello! line 1\n" >> hello.txt # 向文件输入内容, -e 表示支持转义字符的解析
echo -e '\tHello! line 2\n' >> hello.txt
echo "Good job!" >> ~/good_job.txt

mkdir ~/just_test
cp -r "$HOME/good_job.txt" ~/just_test/
cp -r "$EXEC" ~/just_test

# history -c  # 删除命令历史，或可以防止 .bash_history 文件更改
